package main

import (
	"fmt"
	"time"
)

func main() {
	//numsChan := make(chan int, 10)
	//1、当缓冲写满的时候，变成写阻塞，当被读取后再恢复
	//2、当缓冲区空的时候，读阻塞
	//3、如果管道没有使用make分配空间，管道默认是nil的，读取，写入都会阻塞
	//4、对于一个管道，读于写的次数， 必须对等

	var names chan string //默认是nil
	names = make(chan string, 10)

	go func() {
		fmt.Println("names: ", <-names)
	}()

	names <- "hello"
	time.Sleep(time.Second)

	namesChan1 := make(chan int, 10)

	//写50
	go func() {
		for i := 0; i < 50; i++ {
			namesChan1 <- i
			fmt.Println("write data: ", i)
		}
	}()

	//读,当主程序被管道阻塞时，那么程序将锁死崩溃
	//要求我们一定要读写次数保持一致
	func() {
		for i := 0; i < 60; i++ {
			data := <-namesChan1
			fmt.Println("read data: ", data)
		}
	}()

	for {

	}
}
